package com.foreknow.demo24;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 *查询完全体
 *
 *
 * 预处理 PreparedStatement接口
 * PreparedStatement	prepareStatement(String sql)
 * 创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。
 * sql - 可能包含一个或多个 '?' IN 参数占位符的 SQL 语句
 * <p>
 * void	setInt(int parameterIndex, int x) 将指定参数设置为给定 Java int 值。
 * parameterIndex - 第一个参数是 1，第二个参数是 2，……     x - 参数值
 */
public class PreparedStatementDemo {
    public static void main(String[] args) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/demodb?useUnicode=true&characterEncoding=utf8&useSSL=false", "root", "root");

            //------------将事物的提交方式改为手动提交--------------
            connection.setAutoCommit(false);

            //获取到到PreparedStatement接口
            PreparedStatement pstmt = connection.prepareStatement("select * from emp where empno=? and ename=?");

            //将？替换为具体的值
            pstmt.setInt(1, 1002);
            pstmt.setString(2,"SMITH");

            //执行查询
            ResultSet rs = pstmt.executeQuery();

            //---------------手动提交事物----------------
            connection.commit();

            List<Emp> list = new ArrayList<>();
            while (rs.next()) {
                Emp emp = new Emp();
                emp.setEmpno(rs.getInt("empno"));
                emp.setEname(rs.getString("ename"));
                emp.setJob(rs.getString("job"));
                list.add(emp);
            }
            //遍历集合
            for (Emp emp : list) {
                System.out.println(emp.getEmpno() + "---" + emp.getEname() + "---" + emp.getJob());
            }

            //关闭资源
            rs.close();
            pstmt.close();
            connection.close();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
}